#ifndef CNC_COMPILER_PROGRAM_MANAGER_H
#define CNC_COMPILER_PROGRAM_MANAGER_H

#include "progdata.h"
#include <bcm/bcm.h>

namespace cnc {

	namespace compiler {

		struct ProgramManager : bcm::Interface
		{
			virtual void setPath(const char *path) = 0;
			virtual ProgramData *getFirstProgramData() = 0;
			virtual ProgramData *getNextProgramData() = 0;
			virtual std::istream *getInputStream(const char *name) = 0;
			virtual void releaseInputStream(std::istream *is) = 0;
			virtual std::ostream *getOutputStream(const char *name) = 0;
			virtual void releaseOutputStream(std::ostream *os) = 0;
			virtual bool renameProgram(const char *oldname, const char *newname) = 0;
			virtual bool removeProgram(const char *filename) = 0;
			virtual void copyProgram(const char *copyFilename, const char *sourceFilename) = 0;
		};

	} // namespace compiler

} // namespace cnc

#endif
